#!/usr/bin/env python3
"""
调试DataParser
Debug DataParser
"""

import sys
import os
import requests

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

def test_data_parser():
    """测试DataParser解析真实HTML"""
    print("🔍 调试DataParser解析")
    print("=" * 50)
    
    try:
        from puxiansheng_scraper.data_parser import DataParser
        from puxiansheng_scraper.http_client import HttpClient
        from puxiansheng_scraper.config_manager import ConfigManager
        
        # 初始化组件
        config = ConfigManager('config.yaml')
        http_client = HttpClient(config)
        data_parser = DataParser()
        
        # 获取真实的HTML响应
        print("📡 获取真实HTML响应...")
        response_data = http_client.get_page_data('sz', 'catering', 1)
        
        print(f"响应数据类型: {type(response_data)}")
        print(f"响应数据键: {list(response_data.keys())}")
        
        if 'html' in response_data:
            html_content = response_data['html']
            print(f"HTML内容长度: {len(html_content)} 字符")
            print("HTML内容前1000字符:")
            print(html_content[:1000])
            print("...")
            
            # 检查是否包含预期的HTML元素
            if '<li' in html_content:
                print("✅ 发现<li>元素")
            else:
                print("❌ 未发现<li>元素")
                
            if 'class="title"' in html_content:
                print("✅ 发现title类")
            else:
                print("❌ 未发现title类")
                
            if 'class="item2"' in html_content:
                print("✅ 发现item2类")
            else:
                print("❌ 未发现item2类")
        
        # 尝试解析数据
        print("\n🔄 尝试解析数据...")
        parsed_listings = data_parser.parse_response(response_data, 'sz', 'catering')
        
        print(f"解析结果: {len(parsed_listings)} 条数据")
        
        if parsed_listings:
            print("✅ 成功解析到数据!")
            for i, listing in enumerate(parsed_listings[:3]):  # 只显示前3条
                print(f"\n📋 数据 {i+1}:")
                print(f"  标题: {listing.title}")
                print(f"  区域: {listing.district}")
                print(f"  租金: {listing.rent_range}")
                print(f"  面积: {listing.area_range}")
                print(f"  详情URL: {listing.detail_url}")
        else:
            print("❌ 未解析到任何数据")
            print(f"解析器错误计数: {data_parser.error_count}")
            
            # 进一步调试
            print("\n🔍 进一步调试...")
            html_content = data_parser._extract_html_from_response(response_data)
            print(f"提取的HTML长度: {len(html_content)}")
            
            if html_content:
                from bs4 import BeautifulSoup
                soup = BeautifulSoup(html_content, 'html.parser')
                
                # 查找所有li元素
                li_elements = soup.find_all('li')
                print(f"找到 {len(li_elements)} 个<li>元素")
                
                if li_elements:
                    print("前3个<li>元素的内容:")
                    for i, li in enumerate(li_elements[:3]):
                        print(f"\nLI {i+1}:")
                        print(li.prettify()[:500])
                        print("...")
                        
                        # 检查是否包含title类
                        title_elem = li.select_one('.title')
                        if title_elem:
                            print(f"  找到title: {title_elem.get_text()}")
                        else:
                            print("  未找到title元素")
                            
                        # 检查是否包含链接
                        link_elem = li.select_one('a[href]')
                        if link_elem:
                            print(f"  找到链接: {link_elem.get('href')}")
                        else:
                            print("  未找到链接元素")
        
    except Exception as e:
        print(f"❌ 测试失败: {e}")
        import traceback
        traceback.print_exc()

def test_html_structure():
    """测试HTML结构"""
    print("\n🏗️ 分析HTML结构")
    print("=" * 50)
    
    try:
        # 直接获取HTML并分析结构
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        
        response = requests.get('https://sz.puxiansheng.com/find_list-hy-1.html', headers=headers, timeout=30)
        html_content = response.text
        
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # 查找可能包含数据的容器
        print("🔍 查找数据容器...")
        
        # 查找常见的列表容器
        containers = [
            soup.find('ul'),
            soup.find('ol'),
            soup.find_all('div', class_=lambda x: x and ('list' in x or 'item' in x)),
            soup.find_all('div', class_=lambda x: x and ('result' in x or 'content' in x))
        ]
        
        for i, container in enumerate(containers):
            if container:
                print(f"\n容器 {i+1}: {container.name}")
                if hasattr(container, 'get') and container.get('class'):
                    print(f"  类名: {container.get('class')}")
                
                # 查找子元素
                children = container.find_all(['li', 'div'], recursive=False)
                print(f"  直接子元素数量: {len(children)}")
                
                if children:
                    print(f"  第一个子元素: {children[0].name}")
                    if children[0].get('class'):
                        print(f"  第一个子元素类名: {children[0].get('class')}")
                    print(f"  第一个子元素内容前200字符:")
                    print(children[0].get_text()[:200])
        
        # 查找所有包含文本的li元素
        all_lis = soup.find_all('li')
        print(f"\n📋 总共找到 {len(all_lis)} 个<li>元素")
        
        text_lis = [li for li in all_lis if li.get_text().strip()]
        print(f"📋 包含文本的<li>元素: {len(text_lis)} 个")
        
        if text_lis:
            print("\n前5个包含文本的<li>元素:")
            for i, li in enumerate(text_lis[:5]):
                text = li.get_text().strip()
                print(f"  LI {i+1}: {text[:100]}...")
                
                # 检查是否可能是数据项
                if any(keyword in text for keyword in ['租', '㎡', '万', '元', '区', '路']):
                    print(f"    ✅ 可能是数据项")
                else:
                    print(f"    ❌ 可能不是数据项")
        
    except Exception as e:
        print(f"❌ HTML结构分析失败: {e}")

def main():
    """主函数"""
    test_data_parser()
    test_html_structure()

if __name__ == "__main__":
    main()
